////////////////////////////////////////////////////////////////////
// Programme de traitement de vidéo pour Chrono Cross
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
// Nemesis pour Terminus Traduction (tt_nemesis@yahoo.fr)
// Date de création :		18/07/04
// Dernière modification :	18/07/04
////////////////////////////////////////////////////////////////////

// Entete
#include "Video.h"

/*------------------------------------------------------------------
  Réinsertion d'une vidéo
--------------------------------------------------------------------
 <- fich : fichier STR à traiter
------------------------------------------------------------------*/
void Str_Insertion (char *fich)
{
	// Fichier Str et Vid à traiter
	FILE *str_out_f,*str_in_f;
	char str_nom[STR_NOM_MAX];
	char *str_nom2;
	char str_nom_complet[STR_NOM_MAX];
	// Buffer
	char buffer[STR_BUFFER];
	char entete[STR_ENTETE];
	// Positions dans les fichiers (mode rb+ et débogage)
	long frame_in, frame_out;

	// Message d'accueil
	sprintf(str_nom,"%04d",atoi(fich));
	Main_Message_S("Reinsertion de la video %s.\n",str_nom,OK);

	// Recherche du fichier STR et ouverture
	Fichier_Cherche(DIR_FICH_OUT,str_nom,EXT_STR,&str_nom2);
	sprintf(str_nom_complet,"%s%s",DIR_FICH_OUT,str_nom2);
	str_out_f=fopen(str_nom_complet,"rb+");
	// Recherche du fichier VID et ouverture
	Fichier_Cherche(DIR_FICH_OUT,str_nom,EXT_VID,&str_nom2);
	sprintf(str_nom_complet,"%s%s",DIR_FICH_OUT,str_nom2);
	str_in_f=fopen(str_nom_complet,"rb");

	// Fichiers existants ?
	if (str_out_f==NULL) {
		Main_Message_S("Impossible d'ouvrir le fichier STR %s.\n",str_nom,ER);
		return;
	} 
	if (str_in_f==NULL) {
		Main_Message_S("Impossible d'ouvrir le fichier VID %s.\n",str_nom,ER);
		return;
	}

	frame_in=0;
	frame_out=0;
	// Parcours du fichier VID (contenant uniquement les frames video)
	while (fread(buffer,sizeof(char),STR_BUFFER,str_in_f)>0) {
		while(fread(entete,sizeof(char),STR_ENTETE,str_out_f)>0
				&& memcmp(buffer,entete,STR_ENTETE)!=0) {
			frame_out++;
			fseek(str_out_f,frame_out*STR_BUFFER,SEEK_SET);
		}
		// Test en cas d'arrivée en fin de fichier source
		if (feof(str_out_f)!=0) {
			Main_Message_D("Frame %d non atteinte.\n",frame_in,ER);
		} else {
			// Ecriture du secteur
			fseek(str_out_f,frame_out*STR_BUFFER,SEEK_SET);
			fwrite(buffer,sizeof(char),STR_BUFFER,str_out_f);
			frame_out++;
			fseek(str_out_f,frame_out*STR_BUFFER,SEEK_SET);
			frame_in++;
		}
	}
	// Fermeture des fichiers
	fclose(str_out_f);
	fclose(str_in_f);
}